//
//  C#Library.c
//  TengYunWaystation
//
//  Created by Johnny on 15/5/4.
//  Copyright (c) 2015年 xingrong. All rights reserved.
//

#include "C#Library.h"
#include <string.h>

/*半字节查表法算CRC16*/
unsigned short usCRC16_tbl(unsigned char* ptr, int len) {
    unsigned int crc;
    unsigned char da;
    unsigned int crc_ta[16] = {
        // CRC 余式表
        0x0000, 0x1021, 0x2042, 0x3063,
        0x4084, 0x50a5, 0x60c6, 0x70e7,
        0x8108, 0x9129, 0xa14a, 0xb16b,
        0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
    };
    
    crc = 0;
    while (len-- != 0) {
        da = ((unsigned char)(crc >> 8)) >> 4;
        crc <<= 4;
        crc ^= crc_ta[da ^ (*ptr >> 4)];
        da = ((unsigned char)(crc >> 8)) >> 4;
        crc <<= 4;
        crc ^= crc_ta[da ^ (*ptr & 0x0f)];
        ptr++;
    }
    
    return crc;
}

//将short转化为byte
void VShort2Byte(unsigned short iShort, char *pByte) {
    char szTemp1[10];
    char szTemp2[10];
    
    memset(szTemp1, 0,  sizeof(szTemp1));
    memset(szTemp2, 0,  sizeof(szTemp2));
    memcpy(szTemp1, &iShort, 2);
    szTemp2[0] = szTemp1[1];
    szTemp2[1] = szTemp1[0];
    memcpy(pByte, szTemp2, 2);
}

void VInt2Byte(int iInt, char *pByte) {
    char szTemp1[10];
    char szTemp2[10];
    
    memset(szTemp1, 0,  sizeof(szTemp1));
    memset(szTemp2, 0,  sizeof(szTemp2));
    memcpy(szTemp1, &iInt, 4);
    szTemp2[0] = szTemp1[3];
    szTemp2[1] = szTemp1[2];
    szTemp2[2] = szTemp1[1];
    szTemp2[3] = szTemp1[0];
    memcpy(pByte, szTemp2, 4);
}

void VByte2Int(int *iInt, char *pByte) {
    char szTemp1[10];
    char szTemp2[10];
    
    memset(szTemp1, 0,  sizeof(szTemp1));
    memset(szTemp2, 0,  sizeof(szTemp2));
    memcpy(szTemp1, pByte, 4);
    szTemp2[0] = szTemp1[3];
    szTemp2[1] = szTemp1[2];
    szTemp2[2] = szTemp1[1];
    szTemp2[3] = szTemp1[0];
    memcpy(iInt, szTemp2, 4);
}